In [2]:
#1: Importar base de dados
import pandas as pd

tabela_clientes = pd.read_csv("telecom_users.csv")

#2: Visualizar a base de dados
tabela_clientes = tabela_clientes.drop("Unnamed: 0", axis =1) #exclui coluna Unnamed: 0
tabela_clientes = tabela_clientes.drop("IDCliente", axis =1) #exclui coluna IDCliente
display(tabela_clientes) #exibe a tabela formatada
display(tabela_clientes.columns) #mostra o nome de todas as colunas
Genero Aposentado Casado Dependentes MesesComoCliente ServicoTelefone MultiplasLinhas ServicoInternet ServicoSegurancaOnline ServicoBackupOnline ... ServicoSuporteTecnico ServicoStreamingTV ServicoFilmes TipoContrato FaturaDigital FormaPagamento ValorMensal TotalGasto Churn Codigo
0 Masculino 0 Sim Sim 72 Sim Sim Nao SemInternet SemInternet ... SemInternet SemInternet SemInternet 2 anos Nao CartaoCredito 24.10 1734.65 Nao NaN
1 Feminino 0 Nao Nao 44 Sim Nao Fibra Nao Sim ... Nao Sim Nao Mensal Sim CartaoCredito 88.15 3973.2 Nao NaN
2 Feminino 1 Sim Nao 38 Sim Sim Fibra Nao Nao ... Nao Nao Nao Mensal Sim DebitoAutomatico 74.95 2869.85 Sim NaN
3 Masculino 0 Nao Nao 4 Sim Nao DSL Nao Nao ... Nao Nao Sim Mensal Sim BoletoEletronico 55.90 238.5 Nao NaN
4 Masculino 0 Nao Nao 2 Sim Nao DSL Sim Nao ... Nao Nao Nao Mensal Nao BoletoEletronico 53.45 119.5 Nao NaN
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
5981 Masculino 0 Sim Nao 1 Sim Nao Fibra Sim Nao ... Nao Sim Sim Mensal Sim BoletoEletronico 95.00 95 Sim NaN
5982 Feminino 0 Sim Sim 23 Sim Sim DSL Sim Sim ... Sim Sim Sim 2 anos Sim CartaoCredito 91.10 2198.3 Nao NaN
5983 Masculino 0 Sim Sim 12 Sim Nao Nao SemInternet SemInternet ... SemInternet SemInternet SemInternet Mensal Sim BoletoEletronico 21.15 306.05 Nao NaN
5984 Masculino 1 Nao Nao 12 Sim Sim Fibra Nao Nao ... Nao Sim Sim Mensal Sim BoletoEletronico 99.45 1200.15 Sim NaN
5985 Masculino 0 Nao Nao 26 Sim Nao Nao SemInternet SemInternet ... SemInternet SemInternet SemInternet Anual Nao CartaoCredito 19.80 457.3 Nao NaN

5986 rows × 21 columns

Index(['Genero', 'Aposentado', 'Casado', 'Dependentes', 'MesesComoCliente',
       'ServicoTelefone', 'MultiplasLinhas', 'ServicoInternet',
       'ServicoSegurancaOnline', 'ServicoBackupOnline', 'ProtecaoEquipamento',
       'ServicoSuporteTecnico', 'ServicoStreamingTV', 'ServicoFilmes',
       'TipoContrato', 'FaturaDigital', 'FormaPagamento', 'ValorMensal',
       'TotalGasto', 'Churn', 'Codigo'],
      dtype='object')
In [7]:
#3: Tratar dados
#retirar valores vazios
tabela_clientes["TotalGasto"] = pd.to_numeric(tabela_clientes["TotalGasto"], errors="coerce")#transforma texto para numeros, erros transforma para campos vazios
print(tabela_clientes.info())#exibe informacoes da tabela, exibe quantidade de campos vazios

#problema de valores vazios
tabela_clientes = tabela_clientes.dropna(how="all", axis =1) #excluiu todas as colunas com valores vazios
tabela_clientes = tabela_clientes.dropna(how="any", axis =0)#excluiu linhas com pelomenos um valor vazio
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5986 entries, 0 to 5985
Data columns (total 21 columns):
 #   Column                  Non-Null Count  Dtype  
---  ------                  --------------  -----  
 0   Genero                  5986 non-null   object 
 1   Aposentado              5986 non-null   int64  
 2   Casado                  5986 non-null   object 
 3   Dependentes             5985 non-null   object 
 4   MesesComoCliente        5986 non-null   int64  
 5   ServicoTelefone         5986 non-null   object 
 6   MultiplasLinhas         5986 non-null   object 
 7   ServicoInternet         5986 non-null   object 
 8   ServicoSegurancaOnline  5986 non-null   object 
 9   ServicoBackupOnline     5986 non-null   object 
 10  ProtecaoEquipamento     5986 non-null   object 
 11  ServicoSuporteTecnico   5986 non-null   object 
 12  ServicoStreamingTV      5986 non-null   object 
 13  ServicoFilmes           5986 non-null   object 
 14  TipoContrato            5986 non-null   object 
 15  FaturaDigital           5986 non-null   object 
 16  FormaPagamento          5986 non-null   object 
 17  ValorMensal             5986 non-null   float64
 18  TotalGasto              5976 non-null   float64
 19  Churn                   5985 non-null   object 
 20  Codigo                  0 non-null      float64
dtypes: float64(3), int64(2), object(16)
memory usage: 982.2+ KB
None
In [ ]:
 
In [8]:
#4: Olhar a distribuicaso de "Churns"(cancelamentos)
display(tabela_clientes["Churn"].value_counts()) #exibe a quantidade de cancelamentos
display(tabela_clientes["Churn"].value_counts(normalize=True).map('{:.1%}'.format))#exibe a porcentagem de cancelamentos,com 1 casa decimal
#5: Analizar os possiveis motivos para os cancelamentos
#instalar plotly comando no anaconta pip install plotly
import plotly.express as px
#cria todos os graficos da tavela
for coluna in tabela_clientes:
    grafico = px.histogram(tabela_clientes,x=coluna, color="Churn" )
    grafico.show()
Nao    4387
Sim    1587
Name: Churn, dtype: int64
Nao    73.4%
Sim    26.6%
Name: Churn, dtype: object
In [ ]:

In [ ]: